package manager;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;

import javax.swing.ImageIcon;

/**
 * @名称 图片管理器类，单例。
 * @author Passerby
 * @说明 负责加载所有的图片并存储于内部map中，
 * 这样相同的图片在内存中只会存在一个，节省了内存的开销。
 * map中的键为“文件名-上一层路径名”，值为ImageIcon
 */
public class ImageManager {
	
	public static ImageManager imageManager = null;
	private Map<String, ImageIcon> imageMap = null;
	
	/**
	 * @author Passerby
	 * @说明 默认构造函数，但是是单例所以私有化
	 */
	private ImageManager() {
		init();
	}
	
	/**
	 * @author Passerby
	 */
	private void init() {
		imageMap = new HashMap<String, ImageIcon>();
	}
	
	public static ImageManager get() {
		if (imageManager == null) {
			imageManager = new ImageManager();
		}
		return imageManager;
	}
	
	/**
	 * @author Passerby
	 * @param path (String)相对路径名
	 * @说明 添加图片到map中，在添加前先会检测路径是否合法
	 */
	public void addImage(String path) {
//		路径正确性检测
		Path p = Paths.get(path);
		if (!Files.exists(p)) {
			System.out.println("图片路径有误，无法加载");
			return;
		}
		
//		检测是否之前已添加
		String[] tokens = path.split("/");
		int len = tokens.length;
		String key = tokens[len - 1] + "-" + tokens[len - 2];
		if (imageMap.get(key) != null) {
			return;
		}
		
		ImageIcon image = new ImageIcon(path);		
		imageMap.put(key, image);
	}
	
	/**
	 * @author Passerby
	 * @param key (String)键值，格式为“文件名-上一层路径名”
	 * @return 相应的图片，若无则返回空值
	 */
	public ImageIcon getImage(String key) {
		return imageMap.get(key);
	}
}